// 测试类
public class DuckTest {
    public static void main(String[] args) {
        System.out.println("=== 鸭子继承体系测试 ===\n");

        // 测试父类
        System.out.println("1. 测试父类鸭子:");
        Duck normalDuck = new Duck("灰色", 1.5);
        normalDuck.display();
        normalDuck.fly();
        normalDuck.quack();
        normalDuck.setHeavy(1.8);
        System.out.println();

        // 测试绿头鸭子
        System.out.println("2. 测试绿头鸭子:");
        MallardDuck mallard = new MallardDuck();
        mallard.display();
        mallard.fly();          // 重写的方法
        mallard.quack();        // 重写的方法
        mallard.setHeavy(1.5);  // 继承的方法
        mallard.setHeavy(1.3, true);  // 重载的方法 - 带验证
        mallard.setHeavy(1500);       // 重载的方法 - 克转千克
        System.out.println();

        // 测试北京鸭子
        System.out.println("3. 测试北京鸭子:");
        PekingDuck peking = new PekingDuck();
        peking.display();
        peking.fly();                    // 重写的方法
        peking.quack();                  // 重写的方法
        peking.setHeavy(1.8);            // 继承的方法
        peking.setHeavy(1.5, "减肥成功"); // 重载的方法 - 带原因
        peking.setHeavy(10, true);       // 重载的方法 - 百分比调整
        peking.fly();                    // 再次测试飞行能力
        peking.roast();                  // 特有的方法
        System.out.println();

        // 多态测试
        System.out.println("4. 多态测试:");
        Duck[] ducks = new Duck[3];
        ducks[0] = new Duck("黑色", 1.0);
        ducks[1] = new MallardDuck(1.1);
        ducks[2] = new PekingDuck(1.9);

        for (Duck duck : ducks) {
            duck.display();
            duck.fly();
            duck.quack();
            System.out.println();
        }
    }
}